package com.pan.kang.util.mock;


import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class Directory {


    /**
     * 获取某包下所有类
     *
     * @param basedir      运行项目的根路径
     * @param packageName  包名
     * @param childPackage 是否遍历子包
     * @return 类的完整名称
     */
    public static List<String> getClassName(String basedir, String packageName, boolean childPackage) {
        String packagePath = basedir + "/src/main/java/" + packageName.replace(".", "/");
        return getClassNameByFile(packagePath, childPackage);
    }

    /**
     * 从项目文件获取某包下所有类
     *
     * @param filePath     文件路径 - 文件绝对路径
     * @param childPackage 是否遍历子包
     * @return 类的完整名称
     */
    public static List<String> getClassNameByFile(String filePath, boolean childPackage) {
        // 从项目文件获取某包下所有类
        List<String> classNames = new ArrayList<>();
        File file = new File(filePath);
        File[] childFiles = file.listFiles();
        if (childFiles == null) {
            // 文件下的类为空
            return classNames;
        }
        for (File childFile : childFiles) {
            if (childFile.isDirectory()) {
                if (childPackage) {
                    classNames.addAll(getClassNameByFile(childFile.getPath(), true));
                }
            } else {
                String childFilePath = childFile.getPath();
                if (childFilePath.endsWith(".java")) {
                    classNames.add(childFilePath);
                }
            }
        }
        return classNames;
    }
}
